// 封装 user.js：
//  保存用户 token
import { loginApi } from "@/api/index";
// 导入保存 token 到本地的方法
import {setToken, removeToken,removeClientId} from "@/utils/auth";

const state = {
  // 保存 token
  token: "", // 如果本地中有默认数据， token 应该为默认数据
  // 当前登录的用户对象
  userInfo: {},
  ws:void(0),
  // 保存菜单
  menu: [],
  clientHeight:
    document.documentElement.clientHeight || document.body.clientHeight,
};
const mutations = {
  // 保存 token
  setToken(state, payload) {
    // 保存在两个位置 ：
    //  本地（cookie）
    setToken(payload);
    //  内存（vuex）
    state.token = payload;
  },
  // 保存 ws
  setWs(state, payload) {
    // 保存在两个位置 ：
    //  本地（cookie）
    // setWs(payload);
    //  内存（vuex）
    state.ws = payload;
  },
  // 删除 token
  delToken(state) {
    // 删除两个位置的 token
    //  本地（cookie）
    removeToken();
    //  内存（payload）
    state.token = "";
    state.ws.close();
  },
  // 删除client_id
  delClientId(state) {
    removeClientId();
  },
  // 给 userInfo 赋值
  setUserInfo(state, payload) {
    state.userInfo = payload;
  },
  // 清除 userInfo
  removeUserInfo(state) {
    state.userInfo = {};
  },
  //保存menu
  setMenu(state, payload) {
    state.menu = payload;
  },
  //清除menu
  removeMenu(state) {
    state.menu = [];
  },
  //clientHeight高度
  listenHeight(state, val) {
    state.clientHeight = val;
  },
};
const actions = {
  // 请求服务器的登录接口，得到登录成功后的 token
  async getToken(context, payload) {
    // 发送网络请求
    const res = await loginApi(payload);
    if (res.data.status === 200) {
      // 保存 token
      context.commit("setToken", res.data.data.Access_Token);
      // setToken(res.data.data.Access_Token);
      context.commit("setUserInfo", res.data.data.info);
      context.commit("setMenu", res.data.data.menu);
      setToken(res.data.data);
      return res.data;
    } else {
      return res.data;
    }
  },
};

export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions,
};
